昨天計畫了許多事情,那今天要做的可就多了。
先給大家看看今天的進度:
哇!
好像多了很多不一樣的東西。
但是萬變不離其宗,我們前三個禮拜的練習與實作的是有用的。
所以我做了什麼呢?
好咧。
那有什麼新的技術嗎?
有!
我的子菜單是由Panel所實作的。
把許多UI/UX物件放在Panel上,
就能藉由開啟或關閉Panel來顯示或不顯示介面。
這不需要重新加載場景,所以不會耗費時間在不同簡單介面切換。
該怎麼製作呢?
首先,在已經存在的Canvas上右鍵,創立Panel。
在上面設置好各個按鈕,編輯好各個按鈕的文字。
接著,需要實作菜單邏輯,並連接好與按鈕的互動關係。
建立遊戲主選單與模式選擇子選單的邏輯遊戲物件。
然後上程式碼!
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class MainMenuController : MonoBehaviour
{
public GameModeSelectionController gameModeSelection;
public QuitGameController quitGame;
public void StartNewGame()
{
SceneManager.LoadScene("GameMapScene"); // Load your game scene
}
public void LoadGame()
{
// Implement loading game state
}
public void CheckAchievements()
{
// Implement achievement logic
}
public void QuitGame()
{
Application.Quit(); // Quit the application
}
// Buttons clicked
public void StartNewGameButtonClicked()
{
gameModeSelection.ShowGameModeSelectionPanel();
}
public void LoadGameButtonClicked()
{
}
public void CheckAchievementButtonClicked()
{
}
public void QuitGameButtonClicked()
{
quitGame.ShowQuitGamePanel();
}
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
}
}
然後編輯器中要一一設定按鈕OnClicked()對應函式。
這邊是主選單的。
可以看到新開始遊戲有這麼一行程式碼:
SceneManager.LoadScene("GameMapScene"); // Load your game scene
這是用來載入新場景的。
但是我們還沒實作那部分,所以先創造一個空場景,並輸入名稱就好。
還有這次的重點:
gameModeSelection.ShowGameModeSelectionPanel();
我們一開始會將Panel設定成關閉:
然後在程式碼內設為顯示。
往下是模式選擇子選單的。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class GameModeSelectionController : MonoBehaviour
{
public GameObject gameModeSelectionPanel;
public MainMenuController mainMenuController;
public enum GameMode
{
Standard,
Craze,
Mythic,
TheWorld,
// Add more as needed
}
public GameMode currentgameMode;
public void ShowGameModeSelectionPanel()
{
gameModeSelectionPanel.SetActive(true);
}
// Buttons clicked
public void StandardButtonClicked()
{
currentgameMode = GameMode.Standard;
}
public void CrazeButtonClicked()
{
currentgameMode = GameMode.Craze;
}
public void MythicButtonClicked()
{
currentgameMode = GameMode.Mythic;
}
public void TheWorldButtonClicked()
{
currentgameMode = GameMode.Mythic;
}
public void BackToMainMenuButtonClicked()
{
gameModeSelectionPanel.SetActive(false);
}
public void StartNewGameButtonClicked()
{
mainMenuController.StartNewGame();
}
// Start is called before the first frame update
void Start()
{
currentgameMode = GameMode.Standard;
gameModeSelectionPanel.SetActive(false);
}
}
我們初始設立一個遊戲物件:
public GameObject gameModeSelectionPanel;
這就是讓我們傳入Panel:
然後我們在主選單中宣告了:
public GameModeSelectionController gameModeSelection;
讓我們能夠使用該程式碼內的資產。
In this case, THE PANEL.
對啦,還有很多函式互相呼叫也是。
是不是很神奇呢?
這次就先這樣,我要休啦!